<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    /*
    * sort方法 排序
    *   对数组进行排序，排序结果输出，输出的结果就是原数组
    * 排序算法
    * 初期 比较简单的排序算法
    *
    *   选择排序，从小到大排序
    *   let arr = [7,3,1,2,8,4,6,9,5]
    *
    *   function chooseSort(arr){
    *       let result = [] //记录答案的数组
    *       let length = arr.length
    *       for(let i = 0;i < length;i++){
    *           let s = Infinity //用一个变量记录最小值，先默认设定为无穷大
    *           let idx = -1 //记录下标，默认设置为-1 因为后面要删除这个下标的值 为防止一开始删错 设置不存在的下标就行
    *           arr.forEach((item,index) => {
    *               if(item < s){
    *                   idx = index //抄最小值得下标
    *                   s = item //抄最小值
    *               }
    *           })
    *           result.push(s) //每次循环完成之后，arr中剩下最小的元素就添加进数组了
    *           arr.splice(idx,1) //每次循环完成之后，顺便从原数组中删除这个元素，这样下次就不会再重复找到这个值 在下标为idx的元素开始，删除一位
    *       }
    *       arr.push(...result) //得出的答案挨个添加进去
    *       return arr //返回最终排序好的数组
    *   }
    *
    *   console.log(chooseSort.arr) //打印出排序之后的结果新数组
    *
    * */

    /*
    * 冒泡排序 相邻的进行排序
    *
    * */

    function bubbleSort(arr){
        let length = arr.length
        for(let j = 0;j < length;j++){//外面大循环是所有都循环一次，因为里面冒泡小循环一次只能将最大值找到并排好，其他还需要再循环
            for(let i = 0;i < length - 1 - j;i++){//一次冒泡 从左往右的循环 会首先让最大的元素出现在最右边 减j是因为排好了j个以后循环就能相应减少j次
                if(arr[i] < arr[i+1]){//如果左边这个大于右边这个，交换两者位置
                    let temp = arr[i] //让一个第三者保存左边的值
                    arr[i] = arr[i+1] //再将右边的值赋值给左边
                    arr[i+1] = temp //再将事先保存的左边值赋值给右边
                }
            }
        }
        return arr
    }

</script>
</body>
</html>